何谓架构?
一:架构到底是什么
二:常用的架构技术
三:安全性问题
四: 架构设计的误区
五:总结
一:架构到底是什么
二:常用的架构技术
2.1:分布式
分布式:将同一套业务代码按照业务功能或者自定义的维度拆分不同的子系统,各个系统分开部署,每个子系统叫做服务,每个服务之间一般通过rpc或者webservice来调用
2.1.1: 分布式的优点
分布式的好处就是解耦了原系统,从而便于运维部署和水平扩展,提供软件的伸缩性,甚至服务可以通过不同的语言来实现.各个模块交给不同的人员去开发,每个人各司其职,出现问题也可以快速定位
2.1.1:分布式的缺点
分布式也并不是毫无缺点的,存在以下的问题:
①:服务调用通过网络来调用,一般微服务之间使用rpc来调用的,而rpc的底层就是TCP协议,如果网络故障或者延迟高一点,那么服务调用就有出现超时的可能性,比如dubbo的话会出现RpcException
②:分布式在业务体量比较小或者粒度划分的情况下就是一种灾难式开发,开发和运维的成本都会直线上升
③:分布式的数据一致性和事务比较难以保障,业务目前使用最多的是两阶段提交2pc,需要本地事务和远程事务综合提交,性能比较差
④:分布式session的维护在单体工程中是不需要考虑session的安全性的,而在分布式环境中就必须考虑如何去维护session的一致
⑤:分布式事务问题:分布式下如何保证各个服务的数据一致性也是一种挑战,当程序出现异常崩溃的时候能够保证各个服务能够正常回滚是很重要的。
分布式最常见的技术:分布式缓存、分布式存储、分布式计算、分布式静态资源
2.2:集群
2.3:缓存
缓存是提高软件的性能第一手段,最有效和最具代表性的方法,缓存分为单机缓存和分布式缓存。最常见的分布式缓存技术为redis、memorycache等,单机缓存比如hashmap、concurrentHashmap、guava等。单机缓存的承载容量有限,而分布式缓存的伸缩性和的存储容量会比较可观,就算缓存的空间不足了,也可以通过增加服务器来扩展。
缓存最显著的作用有两个:①加快数据的访问速度②分担后端的数据访问和存储的负载能力,保护数据库
使用缓存需要注意以下几点:
①:缓存雪崩
缓存雪崩指的是所有的缓存在统一时间全部失效,导致大量的请求直接涌入数据库,数据库被击垮。
解决缓存雪崩的方法:缓存过期值在一定的基础上设置随机值
②:缓存击穿
缓存击穿是指某些热点key在某一时间全部失效了,导致大量的请求涌入后台DB数据库
解决缓存击穿的方法:热点数据设置永不过期
③:缓存穿透
一直请求不存在的数据,最终走的还是数据库就是缓存穿透
解决缓存穿透的方法:采用布隆过滤器(bloomFilter),布隆过滤会有一定的误差,但是可以筛选出一定不存在的数据,缺点是无法判定某个key是否确定存在。
2.4:队列
2.5:多线程
2.6:限流
限流是面对高并发的利器之一,例如秒杀场景:在大量的请求涌入后台,QPS高达几十万,如果不能做到有效控制就可能导致请求击垮数据库,DB基本上是一个网站的命脉。缓存、队列、限流等方式的本质其实都是为了保护DB。限流的简单理解其实就是过滤掉无效的请求,将请求限制在一个可以控制的范围内,最常见的限流有以下方式:
①: Redis限流
②:令牌桶算法
④: 滑动窗口
2.7:服务降级和熔断
三:安全性问题
3.1 sql注入
sql注入是目前所有方式中最频繁也是最严重的攻击手段,sql注入如果被居心叵测的黑客攻击很可能整个数据库都会被删除掉,其情节和结果十分恶劣。防止sql注入的有效方式就是
采用jdbc提供的preparementStatement进行预编译,它能有效保证sql的整体结构不会被破坏,万一被sql攻击也可以在预编译阶段失败,而不会执行成功
3.2 跨域攻击
与主站的域名、端口、协议不一致性的请求都可以理解为跨域访问,浏览器有同源策略:浏览器会限制来自于不同源的documet和脚本对当前的document读取或设置部分属性,但是比如src\form表单提交\< img >\< iframe >\< link >是没有跨域限制的。
csrf攻击:登陆网站A,获取到了网站A的cookie用户信息,然后点击了一个恶意网站外链B,网站B可以利用csrf漏洞模拟A网站的用户信息去请求A的某些敏感接口,比如转账、发送消息、邮件、获取部分信息、发起恶意代码等。
如何防止csrf攻击:①接口请求加上随机的token值或者token约束的规则,或者是有时效性的token码。这样的话,外链去访问接口在拦截器中验证token是否有效,②在http的头部加入自定义参数:放到 HTTP 头中自定义的属性里。通过 Ajax,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中
③减少使用get提交,get提交会降低门槛
3.3:XSS攻击
xss攻击指的是攻击者对包含有漏洞的服务器注入js代码,会诱使受害者打开攻击的服务器URL,其中里面的URL会包含一些恶意代码,比如植入病毒、添加广告片段代码、篡改接口信息等。
预防xss攻击的方法:对于用户提交的内容,需要过滤任何有执行能力的脚本或者影响页面的CSS,
四: 架构设计的误区
4.1:为了高大上而设计出复杂的架构
试想如果在业务体量不是特点大的情况下,如果一味的追求时髦,追求新颖,采用分布式微服务架构,那么将会增加业务开发的难度,为了维护大量的微服务而多出很多成本。好的架构一定是适应于自身的业务发展的,而高于业务的,它具有顺应业务发展的前瞻性。
4.2:用技术可以解决一切问题
企图用技术解决一切问题,认为技术是一切的解决之道,是万能的,其实有的时候技术解决不了的问题可以用从业务角度来考虑解决。比如之前楼主做个售票系统,主要是卖某个知名景点的票的业务。后期上线后发现很多人买了很多特价免费票,特价票是针对导游带领的团员的,每个导游每天只能买一张特价免费票和一张半价票,之后看数据发现了很多导游配了两张票,然后那张半价票被退掉,只剩下一张免费票被刷了。技术总监就决定查这部分数据是怎么回事?结果发现部分人利用导游证这个特惠故意购买无价票,这个问题如何从技术上解决呢?如果不允许导游买特惠票不合理,不允许退票也不合理。技术上貌似没有好的手段去杜绝这个问题,只能从线下去处理。
五:总结
本篇文章的主要概略图我总结了一下,大概如下,其中包括分布式、集群、缓存、微服务、队列等。架构的话题弥足长远和复杂,不是一篇简单的文章能描述清楚的。如果要讲明白,估计得写个连载了。本篇文章只是提纲挈领以下,说实话也是蜻蜓点水,希望能起到抛砖引玉的效果,不过在工作中思考、在实践中总结学习,是有助于提高我们的内功心法的。在公众号互联网架构师后台回复“2T”,获取Java面试题和答案。
作者:Yrion
来源:cnblogs.com/wyq178/p/12151160.html
版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢!
5、37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...